package com.yfqy.admin.service;

import com.github.pagehelper.PageInfo;
import com.yfqy.admin.domain.dto.QueryById;
import com.yfqy.admin.domain.dto.system.AddMenusToRole;
import com.yfqy.admin.domain.dto.system.AddRole;
import com.yfqy.admin.domain.dto.system.AddRolesToUser;
import com.yfqy.admin.domain.dto.system.AddSysMenu;
import com.yfqy.admin.domain.dto.system.AddSysUser;
import com.yfqy.admin.domain.dto.system.MenusWithRole;
import com.yfqy.admin.domain.dto.system.ModifySysMenu;
import com.yfqy.admin.domain.dto.system.ModifySysRole;
import com.yfqy.admin.domain.dto.system.ModifySysUser;
import com.yfqy.admin.domain.dto.system.RolesWithUser;
import com.yfqy.admin.domain.dto.system.SysMenuDetail;
import com.yfqy.admin.domain.dto.system.SysMenuQuery;
import com.yfqy.admin.domain.dto.system.SysRoleDetail;
import com.yfqy.admin.domain.dto.system.SysRoleQuery;
import com.yfqy.admin.domain.dto.system.SysUserDetail;
import com.yfqy.admin.domain.dto.system.SysUserQuery;
import com.yfqy.admin.domain.vo.common.ResultVO;

import java.util.List;

public interface SystemManagerService {
    ResultVO<String> addSysUser(AddSysUser addSysUser);

    ResultVO<SysUserDetail> getSysUserById(Long id);

    ResultVO<PageInfo<SysUserDetail>> getSysUserPage(SysUserQuery sysUserQuery);

    ResultVO<Void> modifySysUser(ModifySysUser modifySysUser);

    ResultVO<String> addRolesToUser(AddRolesToUser addRolesToUser);

    ResultVO<String> addSysRole(AddRole addRole);

    ResultVO<SysRoleDetail> getSysRoleById(Long id);

    ResultVO<PageInfo<SysRoleDetail>> getSysRolePage(SysRoleQuery sysRoleQuery);

    ResultVO<String> modifySysRole(ModifySysRole modifySysRole);

    ResultVO<Long> addSysMenu(AddSysMenu addSysMenu);

    ResultVO<SysMenuDetail> getSysMenuById(Long id);

    ResultVO<List<SysMenuDetail>> getSysMenuTree();

    ResultVO<Void> modifySysMenu(ModifySysMenu modifySysMenu);

    ResultVO<PageInfo<SysMenuDetail>> getSysMenuPage(SysMenuQuery sysMenuQuery);

    ResultVO<List<SysMenuDetail>> getSysUserMenuTree();

    ResultVO<String> addMenusToRole(AddMenusToRole addMenusToRole);

    /**
     * 用户绑定角色回写展示
     */
    ResultVO<List<RolesWithUser>> rolesWithUser(QueryById queryById);

    /**
     * 角色绑定权限回写展示
     */
    ResultVO<List<MenusWithRole>> menusWithRole(QueryById queryById);

    ResultVO<Void> deleteSysMenu(Long id);

    ResultVO<String> deleteSysRole(Long roleId);

    ResultVO<String> deleteSysUser(Long userId);
}
